/**
 * 给你一个 m 行 n 列的矩阵 matrix ，请按照 顺时针螺旋顺序 ，返回矩阵中的所有元素。
 *
 *https://leetcode.cn/problems/spiral-matrix/
 */
class SpiralOrder {
    public List<Integer> spiralOrder(int[][] matrix) {
        int m=matrix.length;
        int n=matrix[0].length;
        int upper_bound=0;
        int low_bound=m-1;
        int left_bound=0;
        int right_bound=n-1;
        List<Integer> ret=new ArrayList<>();
        while(ret.size()<m*n) {
            if(upper_bound<=low_bound) {
                for(int j=left_bound;j<=right_bound;j++) {
                    ret.add(matrix[upper_bound][j]);
                }
                upper_bound++;
            }
            if(left_bound<=right_bound) {
                for(int i=upper_bound;i<=low_bound;i++) {
                    ret.add(matrix[i][right_bound]);
                }
                right_bound--;
            }
            if(upper_bound<=low_bound) {
                for(int j=right_bound;j>=left_bound;j--) {
                    ret.add(matrix[low_bound][j]);
                }
                low_bound--;
            }
            if(left_bound<=right_bound) {
                for(int i=low_bound;i>=upper_bound;i--) {
                    ret.add(matrix[i][left_bound]);
                }
                left_bound++;
            }
        }
        return ret;
    }
}